package br.com.dlm.simuladoitil.basicas;

import java.util.ArrayList;
import java.util.List;

public class Categoria extends ObjetoGeral {

    public String nome;
    public String descricao;
    public List<Questao> questoes;

    public Categoria(String id, String nome, String descricao, List<Questao> questoes) {
        this.id = id;
        this.nome = nome;
        this.descricao = descricao;
        this.questoes = questoes;
    }

    public List<Questao> getQuestoesRespondidas() {
        List<Questao> questoesRespondidas = new ArrayList<Questao>();

        int quantidadeDeQuestoes = questoes.size();

        for (int indexQuestao = 0; indexQuestao < quantidadeDeQuestoes; indexQuestao++) {
            Questao questao = questoes.get(indexQuestao);

            if (questao.respondida) {
                questoesRespondidas.add(questao);
            }
        }

        return questoesRespondidas;
    }

    public List<Questao> getQuestoesNaoRespondidas(Integer quantidadeDeQuestoes) {
        List<Questao> questoesNaoRespondidas = new ArrayList<Questao>();

        if (quantidadeDeQuestoes == null || quantidadeDeQuestoes > questoes.size()) {
            quantidadeDeQuestoes = questoes.size();
        }

        for (int indexQuestao = 0; indexQuestao < questoes.size(); indexQuestao++) {
            Questao questao = questoes.get(indexQuestao);

            if (!questao.respondida) {
                questoesNaoRespondidas.add(questao);
            }

            if (questoesNaoRespondidas.size() == quantidadeDeQuestoes) {
                break;
            }
        }

        return questoesNaoRespondidas;
    }

    public int getQuantidadeQuestoesRespondidas() {
        int quantidade = 0;
        for (Questao questao : questoes) {
            if (questao.respondida) {
                quantidade++;
            }
        }
        return quantidade;
    }

    public String getQuantidadeQuestoesRespondidasFormatada() {
        return "(" + getQuantidadeQuestoesRespondidas() + "/" + questoes.size() + ")";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Categoria)) return false;

        Categoria categoria = (Categoria) o;

        if (!id.equals(categoria.id)) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = nome.hashCode();
        result = 31 * result + descricao.hashCode();
        result = 31 * result + questoes.hashCode();
        return result;
    }

    @Override
    public boolean checarMudancasAtributos(ObjetoGeral objeto) {
        if (objeto != null && objeto instanceof Categoria) {
            Categoria categoria = (Categoria) objeto;

            if (!descricao.equals(categoria.descricao)) return false;
            if (!nome.equals(categoria.nome)) return false;
        }

        return true;
    }
}
